//用户角色权限。用来控制该角色对所有实体的权限。
var mongodb = require("./db.ts");
var ObjectID = require("mongodb").ObjectID;

const role_tableName = "SysRbac_RoleAccess";

function RoleAccess(role) {
  this.name = role.name; //角色名称
  this.admin = role.admin;
  this.access = role.access; //角色权限、所有实体权限信息。{a.create:true,}
}

//存储角色信息
RoleAccess.prototype.save = function (dataBaseName,callback) {
  var role = {
    name: this.name, //角色名称
    admin: this.admin, //是否管理员
    access: this.access, //角色权限、所有实体权限信息。{a.create:true,}
  };
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(role_tableName, function (err, collection) {
      if (err) {
        return callback(err);
      }
      collection.insert(role, { safe: true }, function (err, user) {
        if (err) {
          return callback(err);
        }
        callback(null, user.ops[0]);
      });
    });
  });
};

RoleAccess.getAllData = function (dataBaseName,callback) {
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(role_tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      //根据 query 对象查询文章
      collection.find(query).toArray(function (err, objects) {
        if (err) {
          return callback(err); //失败！返回 err
        }
        callback(null, objects); //成功！以数组形式返回查询的结果
      });
    });
  });
};

RoleAccess.findById = function (id,databaseName, callback) {
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(databaseName); // 获取数据库
    DataBase.collection(role_tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //生成一个实体配置信息
      collection.findOne(
        { _id: ObjectID(id) },
        function (err, user) {
          if (err) {
            return callback(err);
            //失败！返回 err 信息
          }
          callback(null, user);
          //成功！返回查询的用户信息
        });
    });
  });
};

RoleAccess.update = function (id, object,dataBaseName, callback) {
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(role_tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //生成一个实体配置信息
      collection.updateOne(
        { _id: ObjectID(id) },
        { $set: object },
        function (err) {
          if (err) {
            return callback(err);
          }
          callback(null, { ...object, _id: id });
        }
      );
    });
  });
};

RoleAccess.deleteById = function (id,dataBaseName, callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(role_tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.deleteOne(query);
      callback(null); //删除成功
    });
  });
};

module.exports = RoleAccess;
